



// utils/Logger.ets
export class TToggerNum {
  // 解析错误堆栈获取调用信息
  private static getCallerInfoTT(): { fileName: string; methodName: string; lineNumber: number } {
    try {
      throw new Error();
    } catch (e) {
      // 解析堆栈信息
      const stack = e.stack.split('\n');
      // 跳过前3行（Error本身、getCallerInfo方法、log方法）
      const callerLine = stack.length >= 4 ? stack[3] : '';

      // 匹配格式：at ClassName.methodName (fileName:lineNumber:columnNumber)
      const regex = /at\s+([\w$]+)?\.?([\w$]+)?\s*\((.*?):(\d+):(\d+)\)/;
      const match = callerLine.match(regex);

      if (match) {
        const [, className, methodName, fileName, lineNumber] = match;
        // 提取页面路径（假设格式为pages/xxx/xxx.ets）
        const pagePath = fileName.split('/').slice(-2).join('/');
        return {
          fileName: pagePath,
          methodName: methodName || 'anonymous',
          lineNumber: parseInt(lineNumber)
        };
      }

      return { fileName: 'unknown', methodName: 'unknown', lineNumber: 0 };
    }
  }


  // 获取调用者信息（文件名、方法名、行号）
  private static getCallerInfo(): {
    fileName: string;
    methodName: string;
    lineNumber: number
  } {
    try {
      throw new Error(); // 抛出错误以获取堆栈信息
    } catch (e) {
      const stack = (e.stack || '').split('\n');
      // 堆栈格式示例：at ClassName.methodName (fileName:line:column)
      const callerLine = stack[3] || ''; // 跳过前3行（Error、getCallerInfo、当前调用方法）

      // 正则匹配调用信息
      const regex = /at\s+(\w+)?\.?(\w+)?\s*\((.*?):(\d+):\d+\)/;
      const match = callerLine.match(regex);

      if (match) {
        const [, className, methodName, fileName, lineNumber] = match;
        // 提取页面相对路径（假设路径格式为pages/xxx/xxx.ets）
        const pagePath = fileName.split('/').slice(-2).join('/');
        return {
          fileName: pagePath,
          methodName: methodName || 'anonymous',
          lineNumber: parseInt(lineNumber)
        };
      }

      return { fileName: 'unknown', methodName: 'unknown', lineNumber: 0 };
    }
  }


  // info 格式化日志输出
  static info(message: string, ...args: any[]) {
    const { fileName, methodName, lineNumber } = this.getCallerInfo();
    const prefix = `[${fileName}:${methodName}:${lineNumber}]`;
    console.info(prefix, message, ...args); // warn error
  }
  // warn 格式化日志输出
  static warn(message: string, ...args: any[]) {
    const { fileName, methodName, lineNumber } = this.getCallerInfo();
    const prefix = `[${fileName}:${methodName}:${lineNumber}]`;
    console.warn(prefix, message, ...args); // warn error
  }
  // error 格式化日志输出
  static error(message: string, ...args: any[]) {
    const { fileName, methodName, lineNumber } = this.getCallerInfo();
    const prefix = `[${fileName}:${methodName}:${lineNumber}]`;
    console.error(prefix, message, ...args); // warn error
  }
}



